/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.folha.controller;

import br.com.folha.dao.GradeDao;
import br.com.folha.dao.UnidadeDao;
import br.com.folha.entity.Unidade;
import java.io.Serializable;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.Set;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;
import org.primefaces.component.datatable.DataTable;

/**
 *
 * @author Marcelo
 */
@ManagedBean(name = "PaginaInicialController")
@ViewScoped
public class PaginaInicialController implements Serializable{
    
    private static final long serialVersionUID = 1L;
    
    private Unidade unidade;
    private String nomeUnidade;
    private Integer selectedUnidades = 0;
    private Set<Unidade> unidadeUsuario;
    private transient DataModel lista;
    private Date data = new Date();
    private GradeDao consulta = new GradeDao();
    private UnidadeDao unidadeDao = new UnidadeDao();
    private Unidade unidadeCorrente;
    private Integer pagina;
    
    public PaginaInicialController(){
        
        try{
        
                pagina = 1;
                LoginController usuarioLogado = new LoginController();            
                unidadeUsuario = usuarioLogado.Usuario.getUnidades();        

                if(unidadeUsuario.size() == 1){

                    for (Iterator iterator = usuarioLogado.Usuario.getUnidades().iterator(); iterator.hasNext();){            
                        Unidade unidade = (Unidade) iterator.next();                                                                               

                        this.selectedUnidades = unidade.getId();
                        this.nomeUnidade      = unidade.getNome();

                    }                     

                }
        
        }catch(Exception e){
            System.out.println("Exceção :"+e.getMessage());
        }

    }
    
    /*
     * Momento que é carregado o select com as unidades que o usuário logado pertence
     * para que o mesmo selecione de qual unidade deseja que a grade horária seja exibida
     */    
    public Collection<SelectItem>  getCarregarUnidadeDisponivel(){
        
        setUnidade(new Unidade());        
        LoginController usuarioLogado = new LoginController();        
        Collection<SelectItem> lst = new ArrayList<SelectItem>(); 
        lst.add(new SelectItem(null, "Selecione a Unidade"));      //Primeiro item do select 
        
        setUnidadeUsuario(usuarioLogado.Usuario.getUnidades());                
        
        for (Iterator iterator = usuarioLogado.Usuario.getUnidades().iterator(); iterator.hasNext();){            
            Unidade unidade = (Unidade) iterator.next();             
            
                lst.add(new SelectItem(unidade.getId(), unidade.getNome()));                                      
            
        }                
        
        return lst;                  
        
    }
    
    public DataModel getLista() throws ParseException{        
        
        try{
        
            if(selectedUnidades != 0){
                if(lista == null || lista.getRowCount() == 0){

                    Calendar calendar = Calendar.getInstance(); // ou new GregorianCalendar  
                    calendar.clear();          
                    calendar.setTime(data);   

                    SimpleDateFormat hr = new SimpleDateFormat("HH:mm");   
                    String pattern = "HH:mm";  

                    DateFormat df = new SimpleDateFormat(pattern);  
                    Date horaIni = df.parse(calendar.get(Calendar.HOUR_OF_DAY) - 1+":"+calendar.get(Calendar.MINUTE));
                    Date horaFim = new Date();
                    if(calendar.get(Calendar.HOUR_OF_DAY) < 13){
                        horaFim = df.parse(13+":"+0);
                    }else if(calendar.get(Calendar.HOUR_OF_DAY) < 18){
                        horaFim = df.parse(18+":"+0);
                    }else{
                        horaFim = df.parse(23+":"+59);
                    }

                     lista = new ListDataModel(consulta.consultaGradeHora(unidadeDao.getById(selectedUnidades),data, data,horaIni,horaFim));

                 }                       

            }
        
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
        
        return lista;
    }   
    
    public void atualizaLista() throws ParseException{
        
        try{
            System.out.println(getLista().getRowCount());
            if(getLista().getRowCount() != 0){
                
                getLista();

                DataTable dataTable = (DataTable) FacesContext.getCurrentInstance()
                        .getViewRoot().findComponent(":principal:aula");
                
                System.out.println("getPageCount :"+dataTable.getPageCount());

                if(dataTable.getPageCount() != 0){
                                    
                        System.out.println("Pagina :"+pagina);
                        dataTable.setFirst(pagina);
                        pagina = pagina + 1;
                    
                    if(pagina == dataTable.getPageCount() || pagina > dataTable.getPageCount()){
                        pagina = 0;
                    }
                
                }
            }                        

            unidadeCorrente = unidadeDao.getById(selectedUnidades);        
            this.nomeUnidade = unidadeCorrente.getNome();             
        
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
        
    }

    public Unidade getUnidade() {
        return unidade;
    }

    public void setUnidade(Unidade unidade) {
        this.unidade = unidade;
    }

    public String getNomeUnidade() {
        return nomeUnidade;
    }

    public void setNomeUnidade(String nomeUnidade) {
        this.nomeUnidade = nomeUnidade;
    }

    public Integer getSelectedUnidades() {
        return selectedUnidades;
    }

    public void setSelectedUnidades(Integer selectedUnidades) {
        this.selectedUnidades = selectedUnidades;
    }

    public Set<Unidade> getUnidadeUsuario() {
        return unidadeUsuario;
    }

    public void setUnidadeUsuario(Set<Unidade> unidadeUsuario) {
        this.unidadeUsuario = unidadeUsuario;
    }

    /**
     * @param lista the lista to set
     */
    public void setLista(DataModel lista) {
        this.lista = lista;
    }
    
}
